package bo.zhao.action.lamda;

/*
 
 Lamda 表达式本质上是 以表达式的方式实现接口，并把实现 与 操作数 传入调用器，实现调用。
 
 第一步，定义接口，接口只包含一个方法声明，否则编译错误。@FunctionalInterface 用于标记是用于 Lamda 表达式类型的接口，可选。
 
 第二步：以表达式的方式定义接口实现。
 
 第三步，执行调用代理，运行逻辑。
 
 总结：单方法接口，通过表达式定义实现。将实现与操作数作为参数，传入调用代理，实现调用。
 
 * */

public class F1 {

	/**
	 * 定义 Lamda 接口
	 * */
	@FunctionalInterface
	interface MathOperation {
		int operation(int a, int b);
	}

	/**
	 * 定义 Lamda 接口
	 * */
	@FunctionalInterface
	interface GreetingService {
		void sayMessage(String message);
	}
 
	public static void main(String[] args) { 

		//定义一个加法实现
		MathOperation plus = (int a, int b) -> a + b;
		//定义一个减法实现
		MathOperation minus = (int a, int b) -> a - b;

		//定义一个正常打印的实现
		GreetingService print= message -> System.out.println(message);
		//定义一个错误打印的实现
		GreetingService error= message -> System.err.println(message);
		
		int r1=plus.operation(1, 2);
		print.sayMessage("r1 = "+r1);
		
		int r2=minus.operation(1, 2);
		error.sayMessage("r2 = "+r2);
 
	}

	

}
